home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / bin / bashbug < prev    next >
Text File  |  2009-09-14  |  7KB  |  273 lines

  1. #!/bin/sh -
  2. #
  3. # bashbug - create a bug report and mail it to the bug address
  4. #
  5. # The bug address depends on the release status of the shell.  Versions
  6. # with status `devel', `alpha', `beta', or `rc' mail bug reports to
  7. # chet@cwru.edu and, optionally, to bash-testers@cwru.edu.
  8. # Other versions send mail to bug-bash@gnu.org.
  9. #
  10. # Copyright (C) 1996-2004 Free Software Foundation, Inc.
  11. #
  12. #   This program is free software: you can redistribute it and/or modify
  13. #   it under the terms of the GNU General Public License as published by
  14. #   the Free Software Foundation, either version 3 of the License, or
  15. #   (at your option) any later version.
  16. #
  17. #   This program is distributed in the hope that it will be useful,
  18. #   but WITHOUT ANY WARRANTY; without even the implied warranty of
  19. #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20. #   GNU General Public License for more details.
  21. #
  22. #   You should have received a copy of the GNU General Public License
  23. #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
  24.  
  25. #
  26. # configuration section:
  27. #    these variables are filled in by the make target in Makefile
  28. #
  29. MACHINE="i486"
  30. OS="linux-gnu"
  31. CC="gcc"
  32. CFLAGS=" -DPROGRAM='bash' -DCONF_HOSTTYPE='i486' -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='i486-pc-linux-gnu' -DCONF_VENDOR='pc' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash' -DSHELL -DHAVE_CONFIG_H   -I.  -I../bash -I../bash/include -I../bash/lib   -g -O2 -Wall"
  33. RELEASE="4.0"
  34. PATCHLEVEL="33"
  35. RELSTATUS="release"
  36. MACHTYPE="i486-pc-linux-gnu"
  37.  
  38. PATH=/bin:/usr/bin:/usr/local/bin:$PATH
  39. export PATH
  40.  
  41. # Check if TMPDIR is set, default to /tmp
  42. : ${TMPDIR:=/tmp}
  43.  
  44. #Securely create a temporary directory for the temporary files
  45. TEMPDIR=$TMPDIR/bbug.$$
  46. (umask 077 && mkdir $TEMPDIR) || {
  47.     echo "$0: could not create temporary directory" >&2
  48.     exit 1
  49. }
  50.  
  51. TEMPFILE1=$TEMPDIR/bbug1
  52. TEMPFILE2=$TEMPDIR/bbug2
  53.         
  54. USAGE="Usage: $0 [--help] [--version] [bug-report-email-address]"
  55. VERSTR="GNU bashbug, version ${RELEASE}.${PATCHLEVEL}-${RELSTATUS}"
  56.  
  57. do_help= do_version=
  58.  
  59. while [ $# -gt 0 ]; do
  60.     case "$1" in
  61.     --help)        shift ; do_help=y ;;
  62.     --version)    shift ; do_version=y ;;
  63.     --)        shift ; break ;;
  64.     -*)        echo "bashbug: ${1}: invalid option" >&2
  65.             echo "$USAGE" >& 2
  66.             exit 2 ;;
  67.     *)        break ;;
  68.     esac
  69. done
  70.  
  71. if [ -n "$do_version" ]; then
  72.     echo "${VERSTR}"
  73.     exit 0
  74. fi
  75.  
  76. if [ -n "$do_help" ]; then
  77.     echo "${VERSTR}"
  78.     echo "${USAGE}"
  79.     echo
  80.     cat << HERE_EOF
  81. Bashbug is used to send mail to the Bash maintainers
  82. for when Bash doesn't behave like you'd like, or expect.
  83.  
  84. Bashbug will start up your editor (as defined by the shell's
  85. EDITOR environment variable) with a preformatted bug report
  86. template for you to fill in. The report will be mailed to the
  87. bash maintainers by default. See the manual for details.
  88.  
  89. If you invoke bashbug by accident, just quit your editor without
  90. saving any changes to the template, and no bug report will be sent.
  91. HERE_EOF
  92.     exit 0
  93. fi
  94.  
  95. # Figure out how to echo a string without a trailing newline
  96. N=`echo 'hi there\c'`
  97. case "$N" in
  98. *c)    n=-n c= ;;
  99. *)    n= c='\c' ;;
  100. esac
  101.  
  102. BASHTESTERS="bash-testers@cwru.edu"
  103.  
  104. case "$RELSTATUS" in
  105. alpha*|beta*|devel*|rc*)    BUGBASH=chet@cwru.edu ;;
  106. *)                BUGBASH=bug-bash@gnu.org ;;
  107. esac
  108.  
  109. case "$RELSTATUS" in
  110. alpha*|beta*|devel*|rc*)
  111.         echo "$0: This is a testing release.  Would you like your bug report"
  112.         echo "$0: to be sent to the bash-testers mailing list?"
  113.         echo $n "$0: Send to bash-testers? $c"
  114.         read ans
  115.         case "$ans" in
  116.         y*|Y*)    BUGBASH="${BUGBASH},${BASHTESTERS}" ;;
  117.         esac ;;
  118. esac
  119.  
  120. BUGBASH="${BUGBASH},bash@packages.debian.org"
  121. BUGADDR="${1-$BUGBASH}"
  122.  
  123. if [ -z "$DEFEDITOR" ] && [ -z "$EDITOR" ]; then
  124.     if [ -x /usr/bin/editor ]; then
  125.         DEFEDITOR=editor
  126.     elif [ -x /usr/local/bin/ce ]; then
  127.         DEFEDITOR=ce
  128.     elif [ -x /usr/local/bin/emacs ]; then
  129.         DEFEDITOR=emacs
  130.     elif [ -x /usr/contrib/bin/emacs ]; then
  131.         DEFEDITOR=emacs
  132.     elif [ -x /usr/bin/emacs ]; then
  133.         DEFEDITOR=emacs
  134.     elif [ -x /usr/bin/xemacs ]; then
  135.         DEFEDITOR=xemacs
  136.     elif [ -x /usr/contrib/bin/jove ]; then
  137.         DEFEDITOR=jove
  138.     elif [ -x /usr/local/bin/jove ]; then
  139.         DEFEDITOR=jove
  140.     elif [ -x /usr/bin/vi ]; then
  141.         DEFEDITOR=vi
  142.     else
  143.         echo "$0: No default editor found: attempting to use vi" >&2
  144.         DEFEDITOR=vi
  145.     fi
  146. fi
  147.  
  148.  
  149. : ${EDITOR=$DEFEDITOR}
  150.  
  151. : ${USER=${LOGNAME-`whoami`}}
  152.  
  153. trap 'rm -rf "$TEMPDIR"; exit 1' 1 2 3 13 15
  154. trap 'rm -rf "$TEMPDIR"' 0
  155.  
  156. UN=
  157. if (uname) >/dev/null 2>&1; then
  158.     UN=`uname -a`
  159. fi
  160.  
  161. if [ -f /usr/lib/sendmail ] ; then
  162.     RMAIL="/usr/lib/sendmail"
  163.     SMARGS="-i -t"
  164. elif [ -f /usr/sbin/sendmail ] ; then
  165.     RMAIL="/usr/sbin/sendmail"
  166.     SMARGS="-i -t"
  167. else
  168.     RMAIL=rmail
  169.     SMARGS="$BUGADDR"
  170. fi
  171.  
  172. INITIAL_SUBJECT='[50 character or so descriptive subject here (for reference)]'
  173.  
  174. cat > "$TEMPFILE1" <<EOF
  175. From: ${USER}
  176. To: ${BUGADDR}
  177. Subject: ${INITIAL_SUBJECT}
  178.  
  179. Configuration Information [Automatically generated, do not change]:
  180. Machine: $MACHINE
  181. OS: $OS
  182. Compiler: $CC
  183. Compilation CFLAGS: $CFLAGS
  184. uname output: $UN
  185. Machine Type: $MACHTYPE
  186.  
  187. Bash Version: $RELEASE
  188. Patch Level: $PATCHLEVEL
  189. Release Status: $RELSTATUS
  190.  
  191. Description:
  192.     [Detailed description of the problem, suggestion, or complaint.]
  193.  
  194. Repeat-By:
  195.     [Describe the sequence of events that causes the problem
  196.     to occur.]
  197.  
  198. Fix:
  199.     [Description of how to fix the problem.  If you don't know a
  200.     fix for the problem, don't include this section.]
  201. EOF
  202.  
  203. cp "$TEMPFILE1" "$TEMPFILE2"
  204. chmod u+w "$TEMPFILE1"
  205.  
  206. trap '' 2        # ignore interrupts while in editor
  207.  
  208. edstat=1
  209. while [ $edstat -ne 0 ]; do
  210.     $EDITOR "$TEMPFILE1"
  211.     edstat=$?
  212.  
  213.     if [ $edstat -ne 0 ]; then
  214.         echo "$0: editor \`$EDITOR' exited with nonzero status."
  215.         echo "$0: Perhaps it was interrupted."
  216.         echo "$0: Type \`y' to give up, and lose your bug report;"
  217.         echo "$0: type \`n' to re-enter the editor."
  218.         echo $n "$0: Do you want to give up? $c"
  219.  
  220.         read ans
  221.         case "$ans" in
  222.         [Yy]*) exit 1 ;;
  223.         esac
  224.  
  225.         continue
  226.     fi
  227.  
  228.     # find the subject from the temp file and see if it's been changed
  229.     CURR_SUB=`grep '^Subject: ' "$TEMPFILE1" | sed 's|^Subject:[     ]*||' | sed 1q`
  230.  
  231.     case "$CURR_SUB" in
  232.     "${INITIAL_SUBJECT}")
  233.         echo
  234.         echo "$0: You have not changed the subject from the default."
  235.         echo "$0: Please use a more descriptive subject header."
  236.         echo "$0: Type \`y' to give up, and lose your bug report;"
  237.         echo "$0: type \`n' to re-enter the editor."
  238.         echo $n "$0: Do you want to give up? $c"
  239.  
  240.         read ans
  241.         case "$ans" in
  242.         [Yy]*) exit 1 ;;
  243.         esac
  244.  
  245.         echo "$0:  The editor will be restarted in five seconds."
  246.         sleep 5
  247.         edstat=1
  248.         ;;
  249.     esac
  250.  
  251. done
  252.  
  253. trap 'rm -rf "$TEMPDIR"; exit 1' 2    # restore trap on SIGINT
  254.  
  255. if cmp -s "$TEMPFILE1" "$TEMPFILE2"
  256. then
  257.     echo "File not changed, no bug report submitted."
  258.     exit
  259. fi
  260.  
  261. echo $n "Send bug report? [y/n] $c"
  262. read ans
  263. case "$ans" in
  264. [Nn]*)    exit 0 ;;
  265. esac
  266.  
  267. ${RMAIL} $SMARGS < "$TEMPFILE1" || {
  268.     cat "$TEMPFILE1" >> $HOME/dead.bashbug
  269.     echo "$0: mail failed: report saved in $HOME/dead.bashbug" >&2
  270. }
  271.  
  272. exit 0
  273.